package cin.ufpe.br.projetoESS.Fachada;

import java.io.IOException;
import java.net.MalformedURLException;
import java.sql.SQLException;

import com.itextpdf.text.DocumentException;

import cin.ufpe.br.projetoESS.Entidades.Anunciante;
import cin.ufpe.br.projetoESS.Entidades.Assinante;
import cin.ufpe.br.projetoESS.Entidades.Classificado;
import cin.ufpe.br.projetoESS.Entidades.Distribuidora;
import cin.ufpe.br.projetoESS.Entidades.FolhaPagamento;
import cin.ufpe.br.projetoESS.Entidades.Funcionario;
import cin.ufpe.br.projetoESS.Entidades.PontoVenda;
import cin.ufpe.br.projetoESS.Entidades.Servico;
import cin.ufpe.br.projetoESS.Negocio.ControleCadastro;
import cin.ufpe.br.projetoESS.Negocio.ControleGeracaoDocumento;
import cin.ufpe.br.projetoESS.Negocio.ControleGeracaoFolhaPagamento;
import cin.ufpe.br.projetoESS.Negocio.ControleRelatorioAssinante;
import cin.ufpe.br.projetoESS.Negocio.ControleLogin;
import cin.ufpe.br.projetoESS.Negocio.ControleRelatorioFinanceiro;
import cin.ufpe.br.projetoESS.Negocio.ControleRelatorioPublicidadePropaganda;
import cin.ufpe.br.projetoESS.Negocio.ControleRelatorioQtdAlocacao;

public class Fachada {
	
	private ControleGeracaoFolhaPagamento controleRelatorioFolhaPagamento;
	private ControleCadastro controleCadastro;
	private ControleLogin controleLogin;
	private ControleGeracaoDocumento controleDocumento;
	private ControleRelatorioPublicidadePropaganda controleRelatorioPublicidade;
	private ControleRelatorioFinanceiro controleRelatorioFinanceiro;
	private ControleRelatorioAssinante controleRelatorioAssinante;
	private ControleRelatorioQtdAlocacao controleRelatorioQtdAlocacao;
	
	
	public Fachada(ControleGeracaoFolhaPagamento controleRelatorioFolhaPagamento,
			ControleCadastro controleCadastro,
			ControleLogin controleLogin,ControleGeracaoDocumento controleDocumento,
			ControleRelatorioPublicidadePropaganda controleRelatorioPublicdade,
			ControleRelatorioFinanceiro controleRelatorioFinanceiro,
			ControleRelatorioAssinante controleRelatorioAssinante,
			ControleRelatorioQtdAlocacao controleRelatorioQtdAlocacao) {
		this.controleRelatorioFolhaPagamento = controleRelatorioFolhaPagamento;
		this.controleCadastro = controleCadastro;
		this.controleLogin = controleLogin;
		this.controleDocumento=controleDocumento;
		this.controleRelatorioPublicidade=controleRelatorioPublicdade;
		this.controleRelatorioFinanceiro = controleRelatorioFinanceiro;
		this.controleRelatorioAssinante = controleRelatorioAssinante;
		this.controleRelatorioQtdAlocacao = controleRelatorioQtdAlocacao;
	}
	
	//CONTROLE DE RELATORIO QUANTIDADE E ALOCACAO - RH
	public void gerarRelatorioQtdAlocacao() throws MalformedURLException, SQLException, IOException, DocumentException{
		this.controleRelatorioQtdAlocacao.gerarRelatorioQtdAlocacao();
	}
	
	//CONTROLE DE RELATORIO ASSINANTE - VENDAS
	public void gerarRelatorioAssinante(int contratoAssinante) throws MalformedURLException, SQLException, IOException, DocumentException{
		this.controleRelatorioAssinante.gerarRelatorioAssinante(contratoAssinante);
	}
	
	//CONTROLE DE RELATORIO FINANCEIRO
	public void gerarRelatorioFinanceiro() throws MalformedURLException, SQLException, DocumentException, IOException{
		this.controleRelatorioFinanceiro.gerarRelatorioFinanceiro();
	}
	
	//CONTROLE DE RELATORIO PUBLICIDADE - PUBLICIDADE E PROPAGANDA
	public void gerarRelatorioPublicidadePropaganda() throws MalformedURLException, SQLException, DocumentException, IOException{
		this.controleRelatorioPublicidade.gerarRelatorioPublicidade();
	}
	
	//CONTROLE DE DOCUMENTOS - RH
	public void gerarDocumentoAdmissao(int cpfFuncionario) throws MalformedURLException, SQLException, DocumentException, IOException{
		this.controleDocumento.gerarDocumentoAdmissao(cpfFuncionario);		
		
	}
	
	public void gerarDocumentoDemissao(int cpfFuncionario, String dataDemissao) throws Exception{
		this.controleDocumento.gerarDocumentoDemissao(cpfFuncionario, dataDemissao);
		
	}
	
	
	// CONTROLE FOLHA DE PAGAMENTO - FINANCEIRO
	
	public void gerarFolhaPagamento(int cpfFuncionario) throws SQLException, MalformedURLException, DocumentException, IOException{
		this.controleRelatorioFolhaPagamento.gerarFolhaPagamento(cpfFuncionario);
	}
	
	// CONTROLE CADASTRO:
	
	public void cadastrarFuncionario(Funcionario func) throws SQLException{
		this.controleCadastro.cadastrarFuncionario(func);
	}
	
	public void cadastrarFolhaPagamento(FolhaPagamento folha) throws SQLException{
		this.controleCadastro.cadastrarFolhaPagamento(folha);
	}
	
	public void cadastrarServico(Servico servico) throws SQLException{
		this.controleCadastro.cadastrarServico(servico);
	}
	
	public void cadastrarAnunciante(Anunciante anunciante) throws SQLException{
		this.controleCadastro.cadastrarAnunciante(anunciante);
	}
	
	public void cadastrarClassificado(Classificado classificado) throws SQLException{
		this.controleCadastro.cadastrarClassificado(classificado);
	}
	
	public void cadastrarPontoVenda(PontoVenda pontoVenda) throws SQLException{
		this.controleCadastro.cadastrarPontoVenda(pontoVenda);
	}
	
	public void cadastrarDistribuidora(Distribuidora distribuidora) throws SQLException{
		this.controleCadastro.cadastrarDistribuidora(distribuidora);
	}
	
	public void cadastrarAssinante(Assinante assinante) throws SQLException{
		this.controleCadastro.cadastrarAssinante(assinante);
	}
	
	// CONTROLE LOGIN:
	
	public boolean efetuarLogin (int cpf, String senha) throws SQLException{
		return this.controleLogin.efetuarLogin(cpf, senha);
	}
	
	public void cadastrarSenha (int cpf, String senha) throws SQLException{
		this.controleLogin.cadastrarSenha(cpf, senha);
	}
	
	
	//METODOS DE BUSCA
	public Funcionario buscarFuncionario (int cpf) throws SQLException {
		return this.controleLogin.buscarFuncionario(cpf);
	}

	public Assinante buscarAssinante (int contratoAssinante) throws SQLException{
		return this.controleCadastro.buscarAssinante(contratoAssinante);
	}
}
